package fr.uniscol.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.uniscol.dao.IUserDao;
import fr.uniscol.model.utilisateur.ProfilUtilisateur;
import fr.uniscol.model.utilisateur.User;
import fr.uniscol.service.IUserService;

@Service
@Transactional(readOnly=true)
public class UserServiceImpl implements IUserService {

	@Autowired
	private IUserDao userDao;
	
	/** Les profils des utilisateurs */
	private List<ProfilUtilisateur> profils = null;
	
	public void setUserDao(IUserDao userDao){
		this.userDao = userDao;
	}
	
	public User authentifier(String login, String password) {
		
		if(login == null || password == null){
			return null;
		}
		
		User user = userDao.getUser(login);
		
		if(user != null && user.getPassword().equals(password)){
			return user;
		}else{
			return null;
		}
	}

	@Transactional(readOnly=false)
	public void creerUtilisateur(User user) {
		userDao.createUser(user);
	}

	@Transactional(readOnly=false)
	public void modifierUtilisateur(User user) {
		userDao.updateUser(user);
	}

	@Transactional(readOnly=false)
	public void supprimerUtilisateur(User user) {
		userDao.deleteUser(user.getLogin());
	}

	public List<User> getAllUtilisateurs() {
		return userDao.getAllUsers();
	}

	public User getUtilisateur(String login) {
		return userDao.getUser(login);
	}

	public List<ProfilUtilisateur> getProfils() {
		if(profils == null){
			profils = userDao.getProfils();
		}
		return profils;
	}

	public ProfilUtilisateur getProfilUtilisateur(int code) {

		for(ProfilUtilisateur p : getProfils()){
			if(p.getCode() == code){
				return p;
			}
		}
		
		return null;
	}

	@Transactional(readOnly=false)
	public void enregistrerUtilisateurs(List<User> users) {
		for(User u : users){
			userDao.createUser(u);
		}
	}
}
